package com.util;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.SocketException;

import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

public class FTPUtil {
	 private static Logger logger = Logger.getLogger(FTPUtil.class);  
	  
     
     
	    /** 
	     * 获取FTPClient对象 
	     * @param ftpHost FTP主机服务器 
	     * @param ftpPassword FTP 登录密码 
	     * @param ftpUserName FTP登录用户名 
	     * @param ftpPort FTP端口 默认为21 
	     * @return 
	     */  
	    public static FTPClient getFTPClient(String ftpHost, String ftpPassword,  
	            String ftpUserName, int ftpPort) {  
	        FTPClient ftpClient = null;  
	        try {  
	            ftpClient = new FTPClient();  
	            ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器  
	            ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器  
	            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {  
	                logger.info("未连接到FTP，用户名或密码错误。");  
	                ftpClient.disconnect();  
	            } else {  
	                logger.info("FTP连接成功。");  
	            }  
	        } catch (SocketException e) {  
	            e.printStackTrace();  
	            logger.info("FTP的IP地址可能错误，请正确配置。");  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	            logger.info("FTP的端口错误,请正确配置。");  
	        }  
	        return ftpClient;  
	    }  
	    
	    public static String readConfigFileForFTP(String ftpUserName, String ftpPassword,  
	            String ftpPath, String ftpHost, int ftpPort, String fileName) {  
	        StringBuffer resultBuffer = new StringBuffer();  
	        InputStream in = null;  
	        FTPClient ftpClient = null;  
	        logger.info("开始读取绝对路径" + ftpPath + "文件!");  
	        try {  
	            ftpClient = FTPUtil.getFTPClient(ftpHost, ftpPassword, ftpUserName,  
	                    ftpPort);  
	            ftpClient.setControlEncoding("UTF-8"); // 中文支持  
	            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
	            ftpClient.enterLocalPassiveMode();  
	            ftpClient.changeWorkingDirectory(ftpPath);  
	            in = ftpClient.retrieveFileStream(fileName);  
	        } catch (FileNotFoundException e) {  
	            logger.error("没有找到" + ftpPath + "文件");  
	            e.printStackTrace();  
	            return "下载配置文件失败，请联系管理员.";  
	        } catch (SocketException e) {  
	            logger.error("连接FTP失败.");  
	            e.printStackTrace();  
	        } catch (IOException e) {  
	            e.printStackTrace();  
	            logger.error("文件读取错误。");  
	            e.printStackTrace();  
	            return "配置文件读取失败，请联系管理员.";  
	        }  
	        if (in != null) {  
	            BufferedReader br = new BufferedReader(new InputStreamReader(in));  
	            String data = null;  
	            try {  
	                while ((data = br.readLine()) != null) {  
	                    resultBuffer.append(data + "\n");  
	                }  
	            } catch (IOException e) {  
	                logger.error("文件读取错误。");  
	                e.printStackTrace();  
	                return "配置文件读取失败，请联系管理员.";  
	            }finally{  
	                try {  
	                    ftpClient.disconnect();  
	                } catch (IOException e) {  
	                    e.printStackTrace();  
	                }  
	            }  
	        }else{  
	            logger.error("in为空，不能读取。");  
	            return "配置文件读取失败，请联系管理员.";  
	        }  
	        return resultBuffer.toString();  
	    }  
	
	    
	    public static void main(String[] args) {
//	    	FTPClient ftp=getFTPClient("172.16.31.66","hdw19930630","eastmelon",21);
	    	System.out.println(readConfigFileForFTP("ysq","ysq320925","/FTP下载","172.16.31.63", 2121,"1.txt"));
	    	
		}
}
